home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / stack&queue / queue.mod < prev    next >
Encoding:
Text File  |  1993-11-04  |  4.2 KB  |  119 lines

  1. (* ==================================================================== *)
  2. (* === Queue ========================================================== *)
  3. (* ==================================================================== *)
  4. (*
  5.  
  6.   :Program.       Queue.MOD
  7.   :Contents.      queue ADT based on linear lists
  8.   :Author.        Peter Fröhlich [phf]
  9.   :Copyright.     Public Domain
  10.   :Language.      Oberon (revised)
  11.   :Translator.    Amiga Oberon V2.01
  12.   :History.       V0.0 [phf] 02-Sep-1991 [created]
  13.   :History.       V1.0 [phf] 03-Sep-1991 seems to work
  14.   :History.       V1.0 [phf] 08-Sep-1991 [last edit]
  15.  
  16.   :Support.       B. Meyer, Object-oriented Software Construction
  17.   :Imports.       -
  18.   :Bugs.          none known
  19.  
  20.   :Address.       Ebenböckstraße 19, D-8000 München 60
  21.   :Address.       Z-NET:P.FROEHLICH@NEXT-BOX.ZER
  22.   :Phone.         (089) 820 31 72
  23.  
  24. *)
  25. (* ==================================================================== *)
  26.  
  27. MODULE Queue;
  28.  
  29. (* ==================================================================== *)
  30. (* === Imports ======================================================== *)
  31. (* ==================================================================== *)
  32.  
  33. IMPORT
  34.   l : Lists;
  35.  
  36. (* ==================================================================== *)
  37. (* === Types ========================================================== *)
  38. (* ==================================================================== *)
  39.  
  40. TYPE
  41.   Element* = POINTER TO ElementObject;
  42.   ElementObject* = l.Node; (* exported to allow type-extension *)
  43.           
  44.   Queue* = POINTER TO l.List;
  45.  
  46. (* ==================================================================== *)
  47. (* === Procedures ===================================================== *)
  48. (* ==================================================================== *)
  49.  
  50. (*==== Queue creation/destruction ======================================*)
  51.  
  52. (* --- Create --------------------------------------------------------- *)
  53. PROCEDURE Create*(VAR (*OUT*) queue: Queue);
  54. BEGIN
  55.   NEW(queue);
  56.   IF (queue # NIL) THEN
  57.     l.Init(queue^);
  58.   END;
  59. END Create;
  60. (* -------------------------------------------------------------------- *)
  61.  
  62. (* --- Discard -------------------------------------------------------- *)
  63. PROCEDURE Discard*(VAR (*INOUT*) queue: Queue);
  64. BEGIN
  65.   DISPOSE(queue);
  66.   queue := NIL;
  67. END Discard;
  68. (* -------------------------------------------------------------------- *)
  69.  
  70. (*==== Accessing a queue ===============================================*)
  71.  
  72. (* --- Put ------------------------------------------------------------ *)
  73. PROCEDURE Put*(VAR (*INOUT*) queue: Queue; element: Element);
  74. BEGIN
  75.   l.AddTail(queue^,element);
  76. END Put;
  77. (* -------------------------------------------------------------------- *)
  78.  
  79. (* --- Get ------------------------------------------------------------ *)
  80. PROCEDURE Get*(VAR (*INOUT*) queue: Queue): Element;
  81. BEGIN
  82.   RETURN l.RemHead(queue^);
  83. END Get;
  84. (* -------------------------------------------------------------------- *)
  85.  
  86. (* --- Head ----------------------------------------------------------- *)
  87. PROCEDURE Head*(VAR (*IN*) queue: Queue): Element;
  88. BEGIN
  89.   RETURN l.Head(queue^);
  90. END Head;
  91. (* -------------------------------------------------------------------- *)
  92.  
  93. (*==== Status of a queue ===============================================*)
  94.  
  95. (* --- Empty ---------------------------------------------------------- *)
  96. PROCEDURE Empty*(VAR (*IN*) queue: Queue): BOOLEAN;
  97. BEGIN
  98.   RETURN l.Empty(queue^);
  99. END Empty;
  100. (* -------------------------------------------------------------------- *)
  101.  
  102. (* --- Full ----------------------------------------------------------- *)
  103. PROCEDURE Full*(VAR (*IN*) queue: Queue): BOOLEAN;
  104. BEGIN
  105.   RETURN FALSE; (* this implementation can never be full *)
  106. END Full;
  107. (* -------------------------------------------------------------------- *)
  108.  
  109. (* --- Elements ------------------------------------------------------- *)
  110. PROCEDURE Elements*(VAR (*IN*) queue: Queue): LONGINT;
  111. BEGIN
  112.   RETURN l.CountElements(queue^);
  113. END Elements;
  114. (* -------------------------------------------------------------------- *)
  115.  
  116. (* ==================================================================== *)
  117. END Queue.
  118. (* ==================================================================== *)
  119.